#ifndef OBJETOESTATICO_H_
#define OBJETOESTATICO_H_
#include <string>
#include <vector>

#define FPS 20
#define LAPSUS_ANIMACIONES 1000/FPS

#include "../Serializable/Serializable.h"
#include "../../Utils/GestionId.h"
#include "../../Utils/Image.h"
#include "../../Utils/Animacion.h"
#include "../../Utils/Logger.h"
#include "../../Utils/Punto.h"

#define FPS 20
#define LAPSUS_ANIMACIONES 1000/FPS

using namespace std;

enum EstadoVida {
	Vivo,
	Muerto,
	Naciendo,
	Muriendo
};

enum TipoObjeto {
	PERSONAJE,
	BONUS,
	ENEMIGO,
	OBSTACULO,
	PRINCESA
};


enum Orientacion {
	Izquierda, Derecha
};

class ObjetoEstatico: Serializable {

protected:

	Punto posicion;
	int ancho, alto;

	TipoObjeto tipo;
	
	int maximoX;
	int maximoY;
	
	vector<Animacion*> v_animaciones;
	unsigned int animacionActual;
	Uint32 lastTime;
	bool waiting;
	
	EstadoVida estadoVida;
	Orientacion orientacion;

public:

	ObjetoEstatico(int x, int y, int maximoX, int maximoY, Orientacion orientacion = Derecha);
	virtual ~ObjetoEstatico();
	
	//Setters atributos
	void setPosicion(int X, int Y);
	void setOrientacion(Orientacion orientacion);
	void setEstado(int estado);
	void setAncho(int ancho);
	void setAlto(int alto);
	void setEstadoVida(EstadoVida estadoVida);
	void setLastTime(Uint32 time);

	// Getters atributos
	Punto getPosicion();
	Orientacion getOrientacion();
	int getEstado();
	int getAlto();
	int getAncho();
	int getX();
	int getY();
	EstadoVida getEstadoVida();
	int getTipo();

	// Animaciones
	void addAnimacion(int idImagen, int periodo, int cuadros);
	void deleteAnimacion(int index);
	vector<Animacion*> getAnimaciones();
	
	virtual string serializar(Uint32 time);
	virtual pair<idImagen_t, int> getDibujable(Uint32 time);
	virtual pair<idImagen_t, int> getDibujableParticular(Animacion* animacion, Uint32 time, bool* status, int lapsusAnimaciones = LAPSUS_ANIMACIONES);
	virtual void ColisionarConPersonaje(ObjetoEstatico* personaje, int colX, int colY, int colXvieja = NULL, int colYvieja = NULL);
	virtual void ColisionarConEnemigo(ObjetoEstatico* movible, int colX, int colY, int colXvieja = NULL, int colYvieja = NULL);
};

#endif /* OBJETOESTATICO_H_ */
